%     FASTENER DOCTOR - программа для лечения и конвертации крепежа
%     Copyright (C) 2018  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function [An_Coord_Repair_Ctr, Ref_Coord_Repair_Ctr, Repaired_Bush_Conn_Ctr, Del_Red_CBUSH_Ctr, Repaired_Bush_Stiff_Ctr] = Repair_RutFast_Bush(Fastener_Index)

global ErrCode;

global DB_NODES;
global DB_ELEMENTS;
global DB_PSETS;

global AT_NODES;
global AT_ELEMENTS;
global AT_PSETS;

global db_Next_Coord_Number;

global DB_FASTENERS;

% Инициализация счетчиков
An_Coord_Repair_Ctr = 0;
Ref_Coord_Repair_Ctr = 0;
Repaired_Bush_Conn_Ctr = 0;
Del_Red_CBUSH_Ctr = 0;
Repaired_Bush_Stiff_Ctr = 0;

% Исправление систем координат анализа в болте
[temp_counter_1, temp_counter_2] = Repair_RutFast_Coord(Fastener_Index);

if (ErrCode < 0)
    return;
end

% Обновление счетчиков
An_Coord_Repair_Ctr = An_Coord_Repair_Ctr + temp_counter_1;
Ref_Coord_Repair_Ctr = Ref_Coord_Repair_Ctr + temp_counter_2;

% Получение общей системы координат болта
General_Coord_ID = DB_NODES{AT_NODES(DB_FASTENERS{Fastener_Index}.Shank_nodes(1))}.Analysis_CID;

% Получение оси болта
[Axis_Point_1, Axis_Point_2, Axis_vector] = Get_Fastener_Axis(Fastener_Index);

if (ErrCode < 0)
    return;
end

% Получение вектора оси болта, ориентированного от гайки к головке болта
if (DB_FASTENERS{Fastener_Index}.Head_MPC_Index == 1)
    Head_Layer = 1;
else
    Head_Layer = DB_FASTENERS{Fastener_Index}.N_layers;
end

Point_1 = Get_Plate_Midsurf_Point(Fastener_Index, Head_Layer, Axis_Point_1, Axis_Point_2, Axis_vector);

if (ErrCode < 0)
    return;
end

Point_2 = Get_Plate_Midsurf_Point(Fastener_Index, DB_FASTENERS{Fastener_Index}.N_layers-Head_Layer+1, Axis_Point_1, Axis_Point_2, Axis_vector);

if (ErrCode < 0)
    return;
end

if (Equiv_Check_Cube(Point_1, Point_2))
    fprintf (1, '\nОшибка: нулевое расстояние между крайними срединными точками в болте Рутмана с номером %i !\n', Fastener_Index);
    ErrCode = -1;
    return;
end

Sign = sign(dot(Point_1 - Point_2, Axis_vector));

if (Sign > 0)
    Oriented_Axis_vector = Axis_vector;
else
    Oriented_Axis_vector = -Axis_vector;
end

% Цикл по ярусам
for j=1:DB_FASTENERS{Fastener_Index}.N_layers

    % Исправление порядка узлов BUSH-элементов (1 - additional node, 2 - shank node)
    for k=1:size(DB_FASTENERS{Fastener_Index}.Bush_elements{j},1)

        if (DB_ELEMENTS{AT_ELEMENTS(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k))}.Nodes(1) ~= DB_FASTENERS{Fastener_Index}.Additional_nodes(j))

            Element_list = DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k);
            Node_list = zeros(2,1);
            Node_list(1) = DB_ELEMENTS{AT_ELEMENTS(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k))}.Nodes(1);
            Node_list(2) = DB_ELEMENTS{AT_ELEMENTS(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k))}.Nodes(2);
            Target_Node_list = zeros(2,1);
            Target_Node_list(1) = DB_ELEMENTS{AT_ELEMENTS(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k))}.Nodes(2);
            Target_Node_list(2) = DB_ELEMENTS{AT_ELEMENTS(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k))}.Nodes(1);

            Append_To_Output(PCL_Elm_Modify_Conn(Element_list, Node_list, Target_Node_list));
            DB_Elm_Modify_Conn(Element_list, Node_list, Target_Node_list);

            if (ErrCode < 0)
                return;
            end

            Repaired_Bush_Conn_Ctr = Repaired_Bush_Conn_Ctr + 1;

        end

    end

    % Получение отсчетного направления
    [Ref_Dir_Origin, Ref_Dir_Vector] = Get_Reference_Direction(Fastener_Index, j, Axis_Point_1, Axis_Point_2, Axis_vector);

    if (ErrCode < 0)
        return;
    end

    % Получение поступательных и вращательных жесткостей
    [CM_Flag, K_T_Data, K_R_Data] = Get_Bearing_Stiffnesses(Fastener_Index, j, Axis_Point_1, Axis_Point_2, Oriented_Axis_vector, Ref_Dir_Vector);

    if (ErrCode < 0)
        return;
    end

    % Исправление жесткостей
    if (CM_Flag == 0) % Случай изотропного материала

        % Удаление лишних BUSH-элементов, если они есть
        if (size(DB_FASTENERS{Fastener_Index}.Bush_elements{j},1) > 1)

            for k=2:size(DB_FASTENERS{Fastener_Index}.Bush_elements{j},1)

                % Параметры удаляемого элемента
                Pset_ID = DB_ELEMENTS{AT_ELEMENTS(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k))}.Prop_ID;
                Pset_Name = DB_PSETS{AT_PSETS(Pset_ID)}.Patran_name;
                Ori_CID = Get_Bush_Ori_CID(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k));
                [FD_Flag, Number] = DB_PSet_Is_FD(Pset_ID); %#ok<ASGLU>

                % Удаление BUSH-элемента
                Append_To_Output(PCL_Elm_Delete(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k)));
                DB_Elm_Delete(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k));

                if (ErrCode < 0)
                    return;
                end

                % Обновление счетчика
                Del_Red_CBUSH_Ctr = Del_Red_CBUSH_Ctr + 1;

                % Если property set удаленного элемента имеет префикс FD
                if (FD_Flag == 1)

                    % Удаление property set
                    Append_To_Output(PCL_PSet_Delete(Pset_Name));
                    DB_PSet_Delete(Pset_ID);

                    if (ErrCode < 0)
                        return;
                    end
        
                    % Если СК не задействована
                    if (DB_Coord_Is_Free(Ori_CID))
                        
                        % Удаление системы координат
                        Append_To_Output(PCL_Coord_Delete(Ori_CID));
                        DB_Coord_Delete(Ori_CID);

                        if (ErrCode < 0)
                            return;
                        end

                    end

                end

            end

            % Обновление записи в базе
            DB_FASTENERS{Fastener_Index}.Bush_elements{j} = DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1);

        end

        % Новые жесткости
        K_new = zeros(6,1);
        K_new(1) = K_T_Data(1,1);
        K_new(2) = K_T_Data(1,2);
        K_new(4) = K_R_Data(1,2);
        K_new(5) = K_R_Data(1,1);

        % Параметры BUSH-элемента
        Ori_CID = Get_Bush_Ori_CID(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1));
        Pset_ID = DB_ELEMENTS{AT_ELEMENTS(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1))}.Prop_ID;
        Pset_Name = DB_PSETS{AT_PSETS(Pset_ID)}.Patran_name;
        [FD_Flag, Number] = DB_PSet_Is_FD(Pset_ID); %#ok<ASGLU>

        if (Ori_CID == General_Coord_ID) % СК нас устраивает

            % Если новые жесткости отличаются от текущих
            if (Compare_Bush_Stiffnesses(DB_PSETS{AT_PSETS(Pset_ID)}.K, K_new) ~= 1)

                % Если property set элемента имеет префикс FD
                if (FD_Flag == 1)

                    % Модификация жесткостей в property set
                    Append_To_Output(PCL_PSet_Modify_Bush(Pset_Name, Pset_Name, General_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1)));
                    DB_PSet_Modify_Bush(Pset_ID, Pset_Name, General_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1));

                    if (ErrCode < 0)
                        return;
                    end

                else

                    % Получение имени нового property set с префиксом FD
                    New_Pset_Name = Get_Next_FD_PSet_Name();

                    % Создание нового property set с префиксом FD
                    Append_To_Output(PCL_PSet_Create_Bush(New_Pset_Name, General_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []));
                    Created_PSet_ID = DB_PSet_Create_Bush(New_Pset_Name, General_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []);

                    if (ErrCode < 0)
                        return;
                    end

                    % Ассоциирование BUSH-элемента с новым property set
                    Append_To_Output(PCL_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), New_Pset_Name));
                    DB_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), Created_PSet_ID);

                    if (ErrCode < 0)
                        return;
                    end

                end

                % Обновление счетчика
                Repaired_Bush_Stiff_Ctr = Repaired_Bush_Stiff_Ctr + 1;

            end

        else % СК нас не устраивает

            % Если property set элемента имеет префикс FD
            if (FD_Flag == 1)

                % Модификация жесткостей и системы координат в property set
                Append_To_Output(PCL_PSet_Modify_Bush(Pset_Name, Pset_Name, General_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1)));
                DB_PSet_Modify_Bush(Pset_ID, Pset_Name, General_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1));

                if (ErrCode < 0)
                    return;
                end
                
                % Если СК свободна
                if (DB_Coord_Is_Free(Ori_CID))

                    % Удаление старой системы координат
                    Append_To_Output(PCL_Coord_Delete(Ori_CID));
                    DB_Coord_Delete(Ori_CID);

                    if (ErrCode < 0)
                        return;
                    end
                
                end

            else

                % Получение имени нового property set с префиксом FD
                New_Pset_Name = Get_Next_FD_PSet_Name();

                % Создание нового property set с префиксом FD
                Append_To_Output(PCL_PSet_Create_Bush(New_Pset_Name, General_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []));
                Created_PSet_ID = DB_PSet_Create_Bush(New_Pset_Name, General_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []);

                if (ErrCode < 0)
                    return;
                end

                % Ассоциирование BUSH-элемента с новым property set
                Append_To_Output(PCL_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), New_Pset_Name));
                DB_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), Created_PSet_ID);

                if (ErrCode < 0)
                    return;
                end

            end

            % Обновление счетчика
            Repaired_Bush_Stiff_Ctr = Repaired_Bush_Stiff_Ctr + 1;

        end

    else % Случай композита

        % Удаление лишних BUSH-элементов, если они есть
        if (size(DB_FASTENERS{Fastener_Index}.Bush_elements{j},1) > 1)

            for k=2:size(DB_FASTENERS{Fastener_Index}.Bush_elements{j},1)

                % Параметры удаляемого элемента
                Pset_ID = DB_ELEMENTS{AT_ELEMENTS(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k))}.Prop_ID;
                Pset_Name = DB_PSETS{AT_PSETS(Pset_ID)}.Patran_name;
                Ori_CID = Get_Bush_Ori_CID(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k));
                [FD_Flag, Number] = DB_PSet_Is_FD(Pset_ID); %#ok<ASGLU>

                % Удаление BUSH-элемента
                Append_To_Output(PCL_Elm_Delete(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k)));
                DB_Elm_Delete(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(k));

                if (ErrCode < 0)
                    return;
                end

                % Обновление счетчика
                Del_Red_CBUSH_Ctr = Del_Red_CBUSH_Ctr + 1;

                % Если property set удаленного элемента имеет префикс FD
                if (FD_Flag == 1)

                    % Удаление property set
                    Append_To_Output(PCL_PSet_Delete(Pset_Name));
                    DB_PSet_Delete(Pset_ID);

                    if (ErrCode < 0)
                        return;
                    end
                    
                    % Если СК не задействована
                    if (DB_Coord_Is_Free(Ori_CID))

                        % Удаление системы координат
                        Append_To_Output(PCL_Coord_Delete(Ori_CID));
                        DB_Coord_Delete(Ori_CID);

                        if (ErrCode < 0)
                            return;
                        end
                    
                    end

                end

            end

            % Обновление записи в базе
            DB_FASTENERS{Fastener_Index}.Bush_elements{j} = DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1);

        end

        % Новые жесткости
        K_new = zeros(6,1);
        K_new(1) = K_T_Data(1,1);
        K_new(2) = K_T_Data(1,2);
        K_new(4) = K_R_Data(1,2);
        K_new(5) = K_R_Data(1,1);

        % Параметры BUSH-элемента
        Ori_CID = Get_Bush_Ori_CID(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1));
        Pset_ID = DB_ELEMENTS{AT_ELEMENTS(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1))}.Prop_ID;
        Pset_Name = DB_PSETS{AT_PSETS(Pset_ID)}.Patran_name;
        [FD_Flag, Number] = DB_PSet_Is_FD(Pset_ID); %#ok<ASGLU>

        % Вычисление параметров системы координат, в которой должна быть задана ориентация BUSH-элемента
        New_Coord_Origin = Ref_Dir_Origin;

        e_1 = Ref_Dir_Vector;
        e_2 = cross(Oriented_Axis_vector, Ref_Dir_Vector);
        e_2 = e_2 / norm(e_2);

        theta = K_T_Data(1,3);

        New_Coord_e_1 = cosd(theta)*e_1 + sind(theta)*e_2;
        New_Coord_e_1 = New_Coord_e_1 / norm(New_Coord_e_1);

        New_Coord_e_2 = cross(Oriented_Axis_vector, New_Coord_e_1);
        New_Coord_e_2 = New_Coord_e_2 / norm(New_Coord_e_2);

        New_Coord_e_3 = Oriented_Axis_vector;

        New_Coord_Point_on_axis_3 = New_Coord_Origin + New_Coord_e_3;
        New_Coord_Point_on_plane_13 = New_Coord_Origin + New_Coord_e_1;

        % Ветвление по текущей системе координат BUSH-элемента
        if (Ori_CID == General_Coord_ID)

            % Создание новой системы координат
            Append_To_Output(PCL_Coord_Create_Rect_3P(New_Coord_Origin, New_Coord_Point_on_axis_3, New_Coord_Point_on_plane_13));
            New_Coord_ID = DB_Coord_Create_Rect_3P(New_Coord_Origin, New_Coord_Point_on_axis_3, New_Coord_Point_on_plane_13);
            db_Next_Coord_Number = db_Next_Coord_Number + 1;

            if (ErrCode < 0)
                return;
            end

            % Если property set элемента имеет префикс FD
            if (FD_Flag == 1)

                % Модификация жесткостей и системы координат в property set
                Append_To_Output(PCL_PSet_Modify_Bush(Pset_Name, Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1)));
                DB_PSet_Modify_Bush(Pset_ID, Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1));

                if (ErrCode < 0)
                    return;
                end

            else

                % Получение имени нового property set с префиксом FD
                New_Pset_Name = Get_Next_FD_PSet_Name();

                % Создание нового property set с префиксом FD
                Append_To_Output(PCL_PSet_Create_Bush(New_Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []));
                Created_PSet_ID = DB_PSet_Create_Bush(New_Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []);

                if (ErrCode < 0)
                    return;
                end

                % Ассоциирование BUSH-элемента с новым property set
                Append_To_Output(PCL_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), New_Pset_Name));
                DB_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), Created_PSet_ID);

                if (ErrCode < 0)
                    return;
                end

            end

            % Обновление счетчика
            Repaired_Bush_Stiff_Ctr = Repaired_Bush_Stiff_Ctr + 1;

        else

            % Если текущая СК обладает параметрами, в которых должна быть задана ориентация BUSH-элемента
            if (Bush_Coord_Test(Ori_CID, New_Coord_Origin, New_Coord_e_1, New_Coord_e_2) == 0)

                % Если новые жесткости отличаются от текущих
                if (Compare_Bush_Stiffnesses(DB_PSETS{AT_PSETS(Pset_ID)}.K, K_new) ~= 1)

                    % Если property set элемента имеет префикс FD
                    if (FD_Flag == 1)

                        % Модификация жесткостей в property set
                        Append_To_Output(PCL_PSet_Modify_Bush(Pset_Name, Pset_Name, Ori_CID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1)));
                        DB_PSet_Modify_Bush(Pset_ID, Pset_Name, Ori_CID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1));

                        if (ErrCode < 0)
                            return;
                        end

                    else

                        % Создание новой системы координат (т.к. текущая СК чужая)
                        Append_To_Output(PCL_Coord_Create_Rect_3P(New_Coord_Origin, New_Coord_Point_on_axis_3, New_Coord_Point_on_plane_13));
                        New_Coord_ID = DB_Coord_Create_Rect_3P(New_Coord_Origin, New_Coord_Point_on_axis_3, New_Coord_Point_on_plane_13);
                        db_Next_Coord_Number = db_Next_Coord_Number + 1;

                        if (ErrCode < 0)
                            return;
                        end

                        % Получение имени нового property set с префиксом FD
                        New_Pset_Name = Get_Next_FD_PSet_Name();

                        % Создание нового property set с префиксом FD
                        Append_To_Output(PCL_PSet_Create_Bush(New_Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []));
                        Created_PSet_ID = DB_PSet_Create_Bush(New_Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []);

                        if (ErrCode < 0)
                            return;
                        end

                        % Ассоциирование BUSH-элемента с новым property set
                        Append_To_Output(PCL_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), New_Pset_Name));
                        DB_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), Created_PSet_ID);

                        if (ErrCode < 0)
                            return;
                        end

                    end

                    % Обновление счетчика
                    Repaired_Bush_Stiff_Ctr = Repaired_Bush_Stiff_Ctr + 1;

                end

            else

                % Создание новой системы координат
                Append_To_Output(PCL_Coord_Create_Rect_3P(New_Coord_Origin, New_Coord_Point_on_axis_3, New_Coord_Point_on_plane_13));
                New_Coord_ID = DB_Coord_Create_Rect_3P(New_Coord_Origin, New_Coord_Point_on_axis_3, New_Coord_Point_on_plane_13);
                db_Next_Coord_Number = db_Next_Coord_Number + 1;

                if (ErrCode < 0)
                    return;
                end

                % Если property set элемента имеет префикс FD
                if (FD_Flag == 1)

                    % Модификация жесткостей и системы координат в property set
                    Append_To_Output(PCL_PSet_Modify_Bush(Pset_Name, Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1)));
                    DB_PSet_Modify_Bush(Pset_ID, Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1));

                    if (ErrCode < 0)
                        return;
                    end
                    
                    % Если СК свободна
                    if (DB_Coord_Is_Free(Ori_CID))

                        % Удаление старой системы координат
                        Append_To_Output(PCL_Coord_Delete(Ori_CID));
                        DB_Coord_Delete(Ori_CID);

                        if (ErrCode < 0)
                            return;
                        end

                    end

                else

                    % Получение имени нового property set с префиксом FD
                    New_Pset_Name = Get_Next_FD_PSet_Name();

                    % Создание нового property set с префиксом FD
                    Append_To_Output(PCL_PSet_Create_Bush(New_Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []));
                    Created_PSet_ID = DB_PSet_Create_Bush(New_Pset_Name, New_Coord_ID, K_new(1), K_new(2), K_new(3), K_new(4), K_new(5), K_new(6), []);

                    if (ErrCode < 0)
                        return;
                    end

                    % Ассоциирование BUSH-элемента с новым property set
                    Append_To_Output(PCL_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), New_Pset_Name));
                    DB_Elm_Modify_Pset(DB_FASTENERS{Fastener_Index}.Bush_elements{j}(1), Created_PSet_ID);

                    if (ErrCode < 0)
                        return;
                    end

                end

                % Обновление счетчика
                Repaired_Bush_Stiff_Ctr = Repaired_Bush_Stiff_Ctr + 1;

            end

        end

    end

end
